package com.decheng;
//给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
//
// 如果反转后整数超过 32 位的有符号整数的范围 [−2³¹, 231 − 1] ，就返回 0。
//假设环境不允许存储 64 位整数（有符号或无符号）。
//
//
//
// 示例 1：
//
//
//输入：x = 123
//输出：321
//
//
// 示例 2：
//
//
//输入：x = -123
//输出：-321
//
//
// 示例 3：
//
//
//输入：x = 120
//输出：21
//
//
// 示例 4：
//
//
//输入：x = 0
//输出：0
//
//
//
//
// 提示：
//
//
// -2³¹ <= x <= 2³¹ - 1
//
// Related Topics 数学 👍 3105 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
class Solution7 {
    public int reverse(int x) {
        // 反转后的数字
        int reverse = 0;
        // 1. 循环取末尾数字,等于0时停止
        while (x != 0) {
            // 末尾数字
            int tmp = x % 10;
            // 2. 判断是否超出int的范围(9位时就需要提前判断)
            // 214748364 7
            if (reverse > 214748364 || (reverse == 214748364 && tmp > 7)) {
                return 0;
            }
            if (reverse < -214748364 || (reverse == -214748364 && tmp < -8)) {
                return 0;
            }
            // 确保不会溢出后，才完成最终反转
            reverse = reverse * 10 + tmp;
            x /= 10;

        }
        return reverse;
    }

    public static void main(String[] args) {
        System.out.println(new Solution7().reverse(-123));
    }
}
//leetcode submit region end(Prohibit modification and deletion)
